let mapComponent = null
const eventHandlers = {}

export default {
  // 地图组件抛出事件
  emit (eventName, ...args) {
    if (!eventHandlers[eventName]) return
    for (const handler of eventHandlers[eventName]) {
      handler && handler(...args)
    }
  },
  // 普通组件监听地图组件抛出的事件
  addEventListener (eventName, callback) {
    if (!eventHandlers[eventName]) {
      eventHandlers[eventName] = []
    }
    eventHandlers[eventName].push(callback)
  },
  // 移除事件监听
  removeEventListener (eventName, callback) {
    if (!eventHandlers[eventName]) return
    const index = eventHandlers[eventName].indexOf(callback)
    if (index !== -1) {
      eventHandlers[eventName].splice(index, 1)
    }
  },
  // 普通组件调用地图组件方法
  async invoke (methodName, ...args) {
    if (!mapComponent) return
    return mapComponent[methodName](...args)
  },
  // 普通组件调用地图组件内 MapUtils 的方法
  async invokeUtils (methodName, ...args) {
    if (!mapComponent) return
    return mapComponent.invokeUtils(methodName, ...args)
  },
  // 地图组件注册
  register (component) {
    mapComponent = component
  },
  // 获取地图组件
  getMapComponent () {
    return mapComponent
  }
}
